package com.syxbyi._2threadpool;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Stack;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/*
    a. 使用线程池将一个目录中的所有内容拷贝到另外一个目录中，包含子目录中的内容。

    b.实现将指定目录中的所有内容删除，包含子目录中的内容都要全部删除。

    代码涉及线程池、锁、线程通信
    假设总共4个线程，2个拷贝线程和2个删除线程，4个线程共同完成目录的拷贝和删除
    1. 拷贝线程：负责拷贝data目录下的所有文件到test目录下，拷贝线程完成作业后会通知删除线程
    2. 删除线程：负责将拷贝完成的data目录下的内容删除，如果没有可以删除的文件，则释放资源，等待唤醒

 */
public class ThreadPool {
    public static void main(String[] args) {
        String dest = "test";
        DirectoryTree fileTree = null;
        try {
            fileTree = new DirectoryTree("data");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        ExecutorService executorService = Executors.newFixedThreadPool(4);
        executorService.submit(new CopyThread(fileTree, dest));
        executorService.submit(new CopyThread(fileTree, dest));
        executorService.submit(new RemoveThread(fileTree));
        executorService.submit(new RemoveThread(fileTree));
        executorService.shutdown();
    }
}
